Skip to content

Refactor/445 realization validation#515

Merged
acgetchell merged 8 commits into
mainfrom
refactor/445-realization-validation
Jul 14, 2026
Merged

Refactor/445 realization validation#515
acgetchell merged 8 commits into
mainfrom
refactor/445-realization-validation

Conversation

@acgetchell

Copy link
Copy Markdown
Owner

No description provided.

- Rename Level 4 validation APIs, diagnostics, reports, errors, and helper modules to use realization terminology.
- Align Euclidean, toroidal, and spherical validation paths around Valid Realization before Level 5 geometric predicates.
- Refresh validation docs, references, notebook figures, and paper artifacts to distinguish realization validity from Delaunay optimality.

BREAKING CHANGE: Level 4 embedding APIs and types were removed in favor of realization names. Callers must migrate from `is_valid_embedding`, `validate_embedding`, `embedding_report`, and `TriangulationEmbeddingValidationError` to the corresponding realization APIs and types.
- Point validation Semgrep rules at the realization module after the Level 4  terminology rename.
- Align uv and ty tool-version references with the current reviewed toolchain.
- Make optional benchmark comparison reports use the existing atomic writer.
- Clarify convex hull docs around stale detached hull snapshots.
@acgetchell acgetchell self-assigned this Jul 9, 2026
@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: d5794ec3-1473-458d-9ad5-2601d8530557

📥 Commits

Reviewing files that changed from the base of the PR and between 221cd8d and 098de51.

📒 Files selected for processing (8)
  • .config/nextest.toml
  • docs/dev/commands.md
  • docs/dev/testing.md
  • docs/dev/tooling-alignment.md
  • docs/validation.md
  • justfile
  • scripts/tests/test_postprocess_changelog.py
  • tests/triangulation_builder.rs
🚧 Files skipped from review as they are similar to previous changes (6)
  • docs/dev/tooling-alignment.md
  • docs/dev/commands.md
  • tests/triangulation_builder.rs
  • justfile
  • docs/validation.md
  • scripts/tests/test_postprocess_changelog.py

Walkthrough

This PR renames Level 4 embedding validation to realization validation across Rust APIs, geometry, error propagation, tests, documentation, and figures. It also centralizes workflow tool versions in justfile, adds release-version checks, improves changelog processing, and hardens release and subprocess utilities.

Changes

Realization validation

Layer / File(s) Summary
Realization validation core and public API
src/core/realization.rs, src/geometry/realization.rs, src/lib.rs
Adds realization-specific validation types, diagnostics, overlap checks, reports, methods, and exports.
Validation propagation and Delaunay integration
src/core/algorithms/*, src/core/validation.rs, src/delaunay/*, src/core/insertion.rs
Propagates realization errors through insertion, construction, flips, rollback, proof boundaries, and cumulative validation.
Regression and export coverage
tests/*, benches/*, semgrep.yaml
Updates tests, benchmarks, prelude checks, and static-analysis paths for realization APIs and variants.

Repository tooling and release checks

Layer / File(s) Summary
Workflow tool resolution
.github/actions/setup-just/action.yml, .github/workflows/*, justfile
Resolves pinned tools from justfile and adds formatting, lockfile, release-version, and test-profile checks.
Release and script hardening
scripts/check_docs_version_sync.py, scripts/postprocess_changelog.py, scripts/subprocess_utils.py, scripts/tag_release.py
Adds release-version scanning, Markdown normalization, atomic writes, byte stdin handling, and strict GitHub-origin validation.
Documentation and generated artifacts
README.md, docs/*, AGENTS.md, REFERENCES.md, notebooks/01_validation.ipynb, papers/validation.tex
Updates validation terminology, release procedures, references, notebook figures, and paper figure composition.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related issues

Possibly related PRs

Suggested labels: documentation, rust, geometry, api, breaking change

Poem

I’m a rabbit with realized feet,
Hopping through workflows neat.
Errors bloom, reports align,
Tool pins follow one clear line.
“Embedding” rests; realization grows!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive No PR description was provided, so there is no meaningful description to evaluate. Add a short PR description summarizing the main code and documentation changes.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and clearly points to the main change: realization validation refactoring.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 100.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/445-realization-validation

Comment @coderabbitai help to get the list of available commands.

@codacy-production

codacy-production Bot commented Jul 9, 2026

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 511 complexity

Metric Results
Complexity 511

View in Codacy

🟢 Coverage 88.02% diff coverage · +0.04% coverage variation

Metric Results
Coverage variation +0.04% coverage variation (-1.00%)
Diff coverage 88.02% diff coverage

View coverage diff in Codacy

Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (ff74d7c) 80105 72941 91.06%
Head commit (098de51) 80246 (+141) 73104 (+163) 91.10% (+0.04%)

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#515) 651 573 88.02%

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@coderabbitai coderabbitai Bot added api breaking change documentation Improvements or additions to documentation enhancement New feature or request geometry Geometry-related issues rust Pull requests that update rust code labels Jul 9, 2026
@codecov

codecov Bot commented Jul 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.46154% with 27 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.07%. Comparing base (ff74d7c) to head (098de51).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
src/delaunay/validation.rs 67.64% 11 Missing ⚠️
src/core/insertion.rs 64.28% 5 Missing ⚠️
src/core/algorithms/flips.rs 87.50% 3 Missing ⚠️
src/core/algorithms/incremental_insertion.rs 0.00% 3 Missing ⚠️
src/core/tds/errors.rs 0.00% 1 Missing ⚠️
src/delaunay/flips.rs 93.33% 1 Missing ⚠️
src/delaunay/query.rs 0.00% 1 Missing ⚠️
src/delaunay/spherical.rs 93.33% 1 Missing ⚠️
src/topology/traits/global_topology_model.rs 87.50% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #515      +/-   ##
==========================================
+ Coverage   91.03%   91.07%   +0.04%     
==========================================
  Files          88       88              
  Lines       79884    80025     +141     
==========================================
+ Hits        72722    72885     +163     
+ Misses       7162     7140      -22     
Flag Coverage Δ
unittests 91.07% <88.46%> (+0.04%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/invariants.md`:
- Around line 119-138: The Level 4 description is still attributing realization
validation to Euclidean/toroidal topology instead of the validator API. Update
the wording in this invariants section to make
`Triangulation::is_valid_realization()` and `validate_realization()` the
explicit Level 4 owners, while keeping `is_valid_topology()` as Level 3 and
`DelaunayTriangulation::is_valid_delaunay()` as Level 5. Rephrase the
surrounding text so the ownership model matches the actual API surface and
avoids implying topology performs Level 4 validation.

In `@docs/workflows.md`:
- Around line 440-441: The deletion description contains a duplicated “Level 4”
phrase in the workflow text. Update the sentence in the deletion/repair section
so it reads naturally by removing the repeated “Level 4” before “realization
validation,” while keeping the rest of the validation and rollback behavior
wording unchanged.

In `@papers/validation.tex`:
- Around line 74-79: Restore this `papers/validation.tex` block to an
author-owned placeholder instead of finished prose: the `\caption{...}` and
`\Description{...}` in the validation hierarchy figure should be wrapped back
into `\AuthorTodo{}` like the other prose blocks in this file. Keep the
structure in place, but remove the publication-ready caption/alt text and match
the file’s existing pattern so the author can supply the final wording later.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: ab721cdd-7e01-4868-a488-21891d1fed5a

📥 Commits

Reviewing files that changed from the base of the PR and between ff74d7c and ee5131c.

⛔ Files ignored due to path filters (8)
  • papers/generated/validation_hierarchy.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_level_1_element_validity.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_level_2_combinatorial_consistency.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_level_3_intrinsic_pl_topology.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_level_4_valid_realization.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_level_5_geometric_predicates.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_model_failures.png is excluded by !**/*.png, !**/generated/**
  • papers/validation.pdf is excluded by !**/*.pdf
📒 Files selected for processing (74)
  • .github/workflows/benchmarks.yml
  • .github/workflows/ci.yml
  • .github/workflows/generate-baseline.yml
  • .github/workflows/papers.yml
  • .github/workflows/release-benchmarks.yml
  • .github/workflows/semgrep-sarif.yml
  • AGENTS.md
  • CITATION.cff
  • README.md
  • REFERENCES.md
  • benches/README.md
  • benches/common/flip_fixtures.rs
  • benches/profiling_suite.rs
  • docs/ORIENTATION_SPEC.md
  • docs/api_design.md
  • docs/architecture/module_map.md
  • docs/architecture/prelude_reference.md
  • docs/code_organization.md
  • docs/dev/commands.md
  • docs/dev/perf-tuning.md
  • docs/dev/tooling-alignment.md
  • docs/diagnostics.md
  • docs/invariants.md
  • docs/limitations.md
  • docs/topology.md
  • docs/validation.md
  • docs/workflows.md
  • notebooks/01_validation.ipynb
  • papers/validation.tex
  • scripts/benchmark_utils.py
  • semgrep.yaml
  • src/config.rs
  • src/core/algorithms/flips.rs
  • src/core/algorithms/incremental_insertion.rs
  • src/core/construction.rs
  • src/core/facet.rs
  • src/core/insertion.rs
  • src/core/realization.rs
  • src/core/repair.rs
  • src/core/tds/errors.rs
  • src/core/tds/mutation.rs
  • src/core/tds/rollback.rs
  • src/core/tds/storage.rs
  • src/core/tds/validation.rs
  • src/core/validation.rs
  • src/delaunay/builder.rs
  • src/delaunay/construction.rs
  • src/delaunay/flips.rs
  • src/delaunay/pachner.rs
  • src/delaunay/query.rs
  • src/delaunay/spherical.rs
  • src/delaunay/validation.rs
  • src/geometry/algorithms/convex_hull.rs
  • src/geometry/realization.rs
  • src/geometry/util/measures.rs
  • src/geometry/util/point_generation.rs
  • src/lib.rs
  • src/topology/spaces/euclidean.rs
  • src/topology/spaces/spherical.rs
  • src/topology/traits/global_topology_model.rs
  • src/topology/traits/topological_space.rs
  • tests/benchmark_flip_fixtures.rs
  • tests/cli.rs
  • tests/delaunay_edge_cases.rs
  • tests/euler_characteristic.rs
  • tests/large_scale_debug.rs
  • tests/pachner_roundtrip.rs
  • tests/prelude_exports.rs
  • tests/proptest_delaunay_triangulation.rs
  • tests/proptest_flips.rs
  • tests/regressions.rs
  • tests/semgrep/src/project_rules/rust_style.rs
  • tests/spherical_delaunay.rs
  • tests/triangulation_builder.rs

Comment thread docs/invariants.md
Comment thread docs/workflows.md Outdated
Comment thread papers/validation.tex
- Add release-version synchronization checks for package metadata, lockfiles, citation metadata, active docs, README release links, and benchmark workflow examples.
- Centralize tool pins through the justfile and refresh uv-managed tooling for Ruff, Semgrep, Ty, and Plotly.
- Harden changelog and release helpers for Dependabot metadata, Markdown edge cases, GitHub remote validation, and binary git input.
- Clarify Level 4 realization ownership in docs and regenerate validation paper artifacts with the updated hierarchy wording.
@acgetchell acgetchell marked this pull request as ready for review July 13, 2026 20:08
@acgetchell acgetchell enabled auto-merge (squash) July 13, 2026 20:08
@coderabbitai coderabbitai Bot removed the enhancement New feature or request label Jul 13, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (5)
.github/workflows/release-benchmarks.yml (1)

20-22: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Duplicated/fragile uv_version resolution — see consolidated comment.
Deferring detailed analysis to the consolidated comment covering this file plus semgrep-sarif.yml and benchmarks.yml.

Also applies to: 41-50

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/release-benchmarks.yml around lines 20 - 22, Consolidate
the uv_version resolution used by this workflow with the shared resolution used
in semgrep-sarif.yml and benchmarks.yml. Update the relevant setup and
references so uv_version is determined once through the canonical mechanism,
rather than being independently or fragilely resolved in each workflow; leave
the CARGO_TERM_COLOR and RUST_BACKTRACE settings unchanged.
.github/workflows/semgrep-sarif.yml (1)

25-25: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Duplicated/fragile uv_version resolution — see consolidated comment.
Deferring detailed analysis to the consolidated comment covering this file plus benchmarks.yml and release-benchmarks.yml.

Also applies to: 37-46

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/semgrep-sarif.yml at line 25, Consolidate the duplicated
uv_version resolution in this workflow with the equivalent logic in
benchmarks.yml and release-benchmarks.yml. Define or reuse one authoritative
resolution mechanism and update all affected references, including the
additional block noted by the comment, while preserving the existing
version-selection behavior.
.github/workflows/benchmarks.yml (1)

49-49: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Duplicated/fragile uv_version resolution — see consolidated comment.
Deferring detailed analysis to the consolidated comment covering this file plus semgrep-sarif.yml and release-benchmarks.yml.

Also applies to: 70-79

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/benchmarks.yml at line 49, The uv_version resolution is
duplicated and fragile across the benchmark workflows. Consolidate it into one
reliable shared definition and update the benchmark configuration around
BENCHMARK_TIMEOUT to reuse that value consistently, including the corresponding
resolution in semgrep-sarif.yml and release-benchmarks.yml.
.github/workflows/generate-baseline.yml (1)

57-61: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Guard justfile version resolution against empty results. All three workflows resolve pinned tool versions with grep '^var :=' justfile | cut -d '"' -f 2 but never assert the result is non-empty. If a justfile variable is renamed or removed, resolution silently produces an empty string — most dangerously in generate-baseline.yml, where an empty version: input to setup-uv can fall back to installing the latest release and quietly break the intended pin. The cargo-install consumers fail, but with an opaque error rather than a clear "version not found in justfile" message.

  • .github/workflows/generate-baseline.yml#L57-L61: after computing version, add set -euo pipefail and [ -n "$version" ] || { echo "::error::uv_version not found in justfile" >&2; exit 1; } before writing GITHUB_OUTPUT.
  • .github/workflows/rust-clippy.yml#L39-L45: validate both CLIPPY_SARIF and SARIF_FMT resolved to non-empty values before appending to GITHUB_OUTPUT.
  • .github/workflows/audit.yml#L48-L53: validate version is non-empty before writing GITHUB_OUTPUT.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/generate-baseline.yml around lines 57 - 61, Guard all
pinned-tool version resolution against empty values: in
.github/workflows/generate-baseline.yml lines 57-61, enable strict shell
handling and validate uv_version before writing GITHUB_OUTPUT, emitting the
specified error and exiting when absent; in .github/workflows/rust-clippy.yml
lines 39-45, validate both CLIPPY_SARIF and SARIF_FMT before output; in
.github/workflows/audit.yml lines 48-53, validate version before output.
.github/workflows/ci.yml (1)

64-89: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the just-version bootstrap into a shared composite action. All three workflows duplicate the identical "grep justfile for just_version → install justjust --evaluate the rest" sequence, with no error handling if the grep/cut fails to find a version (an empty version would silently install just@ with no pin).

  • .github/workflows/ci.yml#L64-L89: replace this block with a call to a shared composite action (e.g. .github/actions/resolve-just) that outputs just's resolved version and installs it, then keep only the file-specific just --evaluate list.
  • .github/workflows/codecov.yml#L37-L67: same replacement; keep only cargo_llvm_cov_version/nextest_version evaluation.
  • .github/workflows/papers.yml#L69-L97: same replacement; keep only tectonic_version/tex_fmt_version/uv_version evaluation.

Also consider failing fast if version resolves empty (e.g. [ -n "$version" ] || { echo "::error::could not resolve just_version from justfile"; exit 1; }) in the shared action.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 64 - 89, Extract the duplicated
just-version resolution and installation into a shared composite action, such as
.github/actions/resolve-just, exposing the resolved just version and installing
it for callers. Add validation there to fail with an error if just_version
cannot be resolved from justfile. In .github/workflows/ci.yml lines 64-89,
retain only the workflow-specific tool evaluations; apply the same replacement
in .github/workflows/codecov.yml lines 37-67 while retaining
cargo_llvm_cov_version and nextest_version, and in .github/workflows/papers.yml
lines 69-97 while retaining tectonic_version, tex_fmt_version, and uv_version.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @.github/workflows/benchmarks.yml:
- Line 49: The uv_version resolution is duplicated and fragile across the
benchmark workflows. Consolidate it into one reliable shared definition and
update the benchmark configuration around BENCHMARK_TIMEOUT to reuse that value
consistently, including the corresponding resolution in semgrep-sarif.yml and
release-benchmarks.yml.

In @.github/workflows/ci.yml:
- Around line 64-89: Extract the duplicated just-version resolution and
installation into a shared composite action, such as
.github/actions/resolve-just, exposing the resolved just version and installing
it for callers. Add validation there to fail with an error if just_version
cannot be resolved from justfile. In .github/workflows/ci.yml lines 64-89,
retain only the workflow-specific tool evaluations; apply the same replacement
in .github/workflows/codecov.yml lines 37-67 while retaining
cargo_llvm_cov_version and nextest_version, and in .github/workflows/papers.yml
lines 69-97 while retaining tectonic_version, tex_fmt_version, and uv_version.

In @.github/workflows/generate-baseline.yml:
- Around line 57-61: Guard all pinned-tool version resolution against empty
values: in .github/workflows/generate-baseline.yml lines 57-61, enable strict
shell handling and validate uv_version before writing GITHUB_OUTPUT, emitting
the specified error and exiting when absent; in
.github/workflows/rust-clippy.yml lines 39-45, validate both CLIPPY_SARIF and
SARIF_FMT before output; in .github/workflows/audit.yml lines 48-53, validate
version before output.

In @.github/workflows/release-benchmarks.yml:
- Around line 20-22: Consolidate the uv_version resolution used by this workflow
with the shared resolution used in semgrep-sarif.yml and benchmarks.yml. Update
the relevant setup and references so uv_version is determined once through the
canonical mechanism, rather than being independently or fragilely resolved in
each workflow; leave the CARGO_TERM_COLOR and RUST_BACKTRACE settings unchanged.

In @.github/workflows/semgrep-sarif.yml:
- Line 25: Consolidate the duplicated uv_version resolution in this workflow
with the equivalent logic in benchmarks.yml and release-benchmarks.yml. Define
or reuse one authoritative resolution mechanism and update all affected
references, including the additional block noted by the comment, while
preserving the existing version-selection behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 84759362-9f9d-4540-8b6a-6bf7b2f7388b

📥 Commits

Reviewing files that changed from the base of the PR and between ee5131c and 4da0b63.

⛔ Files ignored due to path filters (3)
  • papers/generated/validation_hierarchy.png is excluded by !**/*.png, !**/generated/**
  • papers/validation.pdf is excluded by !**/*.pdf
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (31)
  • .github/workflows/audit.yml
  • .github/workflows/benchmarks.yml
  • .github/workflows/ci.yml
  • .github/workflows/codecov.yml
  • .github/workflows/generate-baseline.yml
  • .github/workflows/papers.yml
  • .github/workflows/release-benchmarks.yml
  • .github/workflows/rust-clippy.yml
  • .github/workflows/semgrep-sarif.yml
  • benches/README.md
  • docs/RELEASING.md
  • docs/dev/commands.md
  • docs/dev/tooling-alignment.md
  • docs/diagnostics.md
  • docs/invariants.md
  • docs/validation.md
  • docs/workflows.md
  • justfile
  • notebooks/01_validation.ipynb
  • pyproject.toml
  • scripts/README.md
  • scripts/check_docs_version_sync.py
  • scripts/postprocess_changelog.py
  • scripts/subprocess_utils.py
  • scripts/tag_release.py
  • scripts/tests/test_check_docs_version_sync.py
  • scripts/tests/test_postprocess_changelog.py
  • scripts/tests/test_subprocess_utils.py
  • scripts/tests/test_tag_release.py
  • semgrep.yaml
  • src/core/realization.rs
🚧 Files skipped from review as they are similar to previous changes (7)
  • docs/diagnostics.md
  • docs/workflows.md
  • benches/README.md
  • docs/invariants.md
  • docs/validation.md
  • notebooks/01_validation.ipynb
  • src/core/realization.rs

- Add shared composite actions for resolving pinned `just` and `uv` versions from `justfile`.
- Reuse the shared resolvers across CI, Codecov, paper, benchmark, SARIF, and baseline workflows.
- Fail early when audit and Clippy SARIF tool pins cannot be resolved.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
.github/actions/resolve-uv/action.yml (2)

12-24: 📐 Maintainability & Code Quality | 🔵 Trivial

Duplicated version-resolution logic with resolve-just.

This shell block (grep + cut + empty check) is nearly identical to the one in .github/actions/resolve-just/action.yml (Lines 12-24). Consider extracting a single parameterized composite action (e.g. accepting the justfile variable name as an input) to avoid maintaining two copies of the same parsing logic.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/actions/resolve-uv/action.yml around lines 12 - 24, Extract the
duplicated version-resolution shell logic from the resolve step and the
corresponding resolve-just action into one parameterized composite action. Make
the action accept the justfile variable name as an input, reuse the shared
grep/cut/empty-check behavior, and update both callers to supply their
respective variables while preserving the existing output and error behavior.

18-22: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Make uv version parsing more robust The current grep '^uv_version :=' ... | cut -d '"' -f 2 path is brittle: a spacing or quoting change in justfile would make resolution fail and exit via the empty check. Consider a more defensive parse or a structured source for the version.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/actions/resolve-uv/action.yml around lines 18 - 22, Update the uv
version resolution in the action’s version-parsing block to tolerate spacing and
quoting variations in the justfile declaration, while still extracting the
intended uv_version value. Preserve the existing empty-value validation and
error behavior, and avoid relying on the fixed quote delimiter and exact spacing
used by the current grep/cut pipeline.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @.github/actions/resolve-uv/action.yml:
- Around line 12-24: Extract the duplicated version-resolution shell logic from
the resolve step and the corresponding resolve-just action into one
parameterized composite action. Make the action accept the justfile variable
name as an input, reuse the shared grep/cut/empty-check behavior, and update
both callers to supply their respective variables while preserving the existing
output and error behavior.
- Around line 18-22: Update the uv version resolution in the action’s
version-parsing block to tolerate spacing and quoting variations in the justfile
declaration, while still extracting the intended uv_version value. Preserve the
existing empty-value validation and error behavior, and avoid relying on the
fixed quote delimiter and exact spacing used by the current grep/cut pipeline.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 4d61a620-18b2-4f89-9fe9-78493ea37ce8

📥 Commits

Reviewing files that changed from the base of the PR and between 4da0b63 and 351007a.

📒 Files selected for processing (11)
  • .github/actions/resolve-just/action.yml
  • .github/actions/resolve-uv/action.yml
  • .github/workflows/audit.yml
  • .github/workflows/benchmarks.yml
  • .github/workflows/ci.yml
  • .github/workflows/codecov.yml
  • .github/workflows/generate-baseline.yml
  • .github/workflows/papers.yml
  • .github/workflows/release-benchmarks.yml
  • .github/workflows/rust-clippy.yml
  • .github/workflows/semgrep-sarif.yml
🚧 Files skipped from review as they are similar to previous changes (8)
  • .github/workflows/release-benchmarks.yml
  • .github/workflows/rust-clippy.yml
  • .github/workflows/codecov.yml
  • .github/workflows/audit.yml
  • .github/workflows/generate-baseline.yml
  • .github/workflows/papers.yml
  • .github/workflows/semgrep-sarif.yml
  • .github/workflows/ci.yml

- Replace per-tool resolver actions with one `setup-just` bootstrap action.
- Resolve uv and other workflow tool pins through `just --evaluate` after installing `just`.
- Document the shared workflow convention for repository tooling.
@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
putComment timed out

@acgetchell

Copy link
Copy Markdown
Owner Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (3)
src/delaunay/builder.rs (1)

2167-2172: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Add regression coverage for the relaxed explicit-construction path.

Please verify tests for both a valid non-Delaunay explicit mesh and a realization-invalid mesh, including supported dimensions where feasible. This branch changes both the proof returned by the builder and the propagated error variant.

As per coding guidelines, tests should verify mathematical, geometric, and topological invariants and cover dimensions 2 through 5 whenever feasible.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/delaunay/builder.rs` around lines 2167 - 2172, Add regression tests
covering the relaxed explicit-construction branch around
validate_realization_only and into_realization_validated_delaunay: verify a
valid non-Delaunay mesh succeeds with the expected realization proof, and a
realization-invalid mesh propagates
ExplicitConstructionError::RealizationValidation. Cover supported dimensions 2
through 5 where feasible, asserting relevant mathematical, geometric, and
topological invariants.

Source: Coding guidelines

.github/workflows/rust-clippy.yml (1)

39-61: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider just --evaluate instead of grep/cut for resolving tool versions.

Parsing justfile with grep '^clippy_sarif_version :=' is brittle: it breaks silently on reformatting (indentation, quote style, inline comments). just --evaluate <variable> resolves the variable using just's own parser and is robust to formatting changes.

♻️ Proposed fix using `just --evaluate`
-          clippy_sarif="$(grep '^clippy_sarif_version :=' justfile | cut -d '"' -f 2 || true)"
+          clippy_sarif="$(just --evaluate clippy_sarif_version || true)"
           if [[ -z "$clippy_sarif" ]]; then
             echo "::error::Could not resolve clippy_sarif_version from justfile"
             exit 1
           fi

-          sarif_fmt="$(grep '^sarif_fmt_version :=' justfile | cut -d '"' -f 2 || true)"
+          sarif_fmt="$(just --evaluate sarif_fmt_version || true)"

This assumes just is already installed/available on the runner before this step (e.g. via a prior setup-just step) — please confirm that's the case for this job.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/rust-clippy.yml around lines 39 - 61, Update the “Resolve
Clippy SARIF tool versions” step to obtain clippy_sarif_version and
sarif_fmt_version through just --evaluate rather than grep/cut parsing of
justfile. Preserve the existing empty-value validation, error messages, and
GITHUB_OUTPUT assignments, and confirm the job has just installed or available
before this step.
docs/RELEASING.md (1)

76-104: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider reminding maintainers to sync the CITATION.cff abstract with README.md.

The citation-review checklist covers author/ORCID/repository/license/DOI but doesn't mention keeping the abstract field mirrored with README.md's Introduction paragraph.

As per coding guidelines, "Keep the first paragraph under README.md's Introduction mirrored in the abstract field of CITATION.cff; update both together."

📝 Proposed addition
 Review the citation identity fields at the same time: author, ORCID,
 repository, license, and DOI. Keep the DOI policy deliberate: update it only
 when the release has a known release-specific DOI or the archival policy
 changes.
+
+If README.md's Introduction paragraph changed since the last release, update
+`CITATION.cff`'s `abstract` field to match it.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/RELEASING.md` around lines 76 - 104, Update the release metadata
checklist in docs/RELEASING.md to explicitly require keeping CITATION.cff’s
abstract synchronized with the first paragraph under README.md’s Introduction,
updating both together alongside the existing citation identity review.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@benches/README.md`:
- Around line 79-83: Update the release-command examples near the documented
`just performance-release` usage to define `TAG` and `PREVIOUS_TAG` before
referencing them, or replace them with clearly labeled concrete placeholder tag
values. Ensure copied commands do not expand unset variables to empty strings,
while preserving the guidance that these commands are only for release repair or
regeneration.

In `@docs/invariants.md`:
- Around line 181-185: In the Levels 1–3 description, replace “abstract oriented
simplicial complex” with “abstract simplicial complex with coherent
orientation,” preserving the surrounding validation scope and wording.

In `@README.md`:
- Around line 193-199: Update the README description of validation levels so it
no longer claims Levels 1–3 are coordinate-independent: state that Levels 2–3
are coordinate-independent, while Level 1 also validates coordinate storage and
invariants. Keep the existing descriptions of Levels 4–5 unchanged.

In `@scripts/postprocess_changelog.py`:
- Around line 1060-1074: Update _has_previous_peer_list_item so a list item with
indentation shallower than peer_indent immediately terminates the backward scan
and returns False; continue matching equal indentation as a peer and skipping
only deeper nested list structure, preserving existing handling for non-list
indented lines.

---

Nitpick comments:
In @.github/workflows/rust-clippy.yml:
- Around line 39-61: Update the “Resolve Clippy SARIF tool versions” step to
obtain clippy_sarif_version and sarif_fmt_version through just --evaluate rather
than grep/cut parsing of justfile. Preserve the existing empty-value validation,
error messages, and GITHUB_OUTPUT assignments, and confirm the job has just
installed or available before this step.

In `@docs/RELEASING.md`:
- Around line 76-104: Update the release metadata checklist in docs/RELEASING.md
to explicitly require keeping CITATION.cff’s abstract synchronized with the
first paragraph under README.md’s Introduction, updating both together alongside
the existing citation identity review.

In `@src/delaunay/builder.rs`:
- Around line 2167-2172: Add regression tests covering the relaxed
explicit-construction branch around validate_realization_only and
into_realization_validated_delaunay: verify a valid non-Delaunay mesh succeeds
with the expected realization proof, and a realization-invalid mesh propagates
ExplicitConstructionError::RealizationValidation. Cover supported dimensions 2
through 5 where feasible, asserting relevant mathematical, geometric, and
topological invariants.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 744a211f-bf73-4cdc-be2f-812f0eec8d6d

📥 Commits

Reviewing files that changed from the base of the PR and between ff74d7c and de09c0d.

⛔ Files ignored due to path filters (9)
  • papers/generated/validation_hierarchy.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_level_1_element_validity.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_level_2_combinatorial_consistency.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_level_3_intrinsic_pl_topology.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_level_4_valid_realization.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_level_5_geometric_predicates.png is excluded by !**/*.png, !**/generated/**
  • papers/generated/validation_model_failures.png is excluded by !**/*.png, !**/generated/**
  • papers/validation.pdf is excluded by !**/*.pdf
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (90)
  • .github/actions/setup-just/action.yml
  • .github/workflows/audit.yml
  • .github/workflows/benchmarks.yml
  • .github/workflows/ci.yml
  • .github/workflows/codecov.yml
  • .github/workflows/generate-baseline.yml
  • .github/workflows/papers.yml
  • .github/workflows/release-benchmarks.yml
  • .github/workflows/rust-clippy.yml
  • .github/workflows/semgrep-sarif.yml
  • AGENTS.md
  • CITATION.cff
  • README.md
  • REFERENCES.md
  • benches/README.md
  • benches/common/flip_fixtures.rs
  • benches/profiling_suite.rs
  • docs/ORIENTATION_SPEC.md
  • docs/RELEASING.md
  • docs/api_design.md
  • docs/architecture/module_map.md
  • docs/architecture/prelude_reference.md
  • docs/code_organization.md
  • docs/dev/commands.md
  • docs/dev/perf-tuning.md
  • docs/dev/tooling-alignment.md
  • docs/diagnostics.md
  • docs/invariants.md
  • docs/limitations.md
  • docs/topology.md
  • docs/validation.md
  • docs/workflows.md
  • justfile
  • notebooks/01_validation.ipynb
  • papers/validation.tex
  • pyproject.toml
  • scripts/README.md
  • scripts/benchmark_utils.py
  • scripts/check_docs_version_sync.py
  • scripts/postprocess_changelog.py
  • scripts/subprocess_utils.py
  • scripts/tag_release.py
  • scripts/tests/test_check_docs_version_sync.py
  • scripts/tests/test_postprocess_changelog.py
  • scripts/tests/test_subprocess_utils.py
  • scripts/tests/test_tag_release.py
  • semgrep.yaml
  • src/config.rs
  • src/core/algorithms/flips.rs
  • src/core/algorithms/incremental_insertion.rs
  • src/core/construction.rs
  • src/core/facet.rs
  • src/core/insertion.rs
  • src/core/realization.rs
  • src/core/repair.rs
  • src/core/tds/errors.rs
  • src/core/tds/mutation.rs
  • src/core/tds/rollback.rs
  • src/core/tds/storage.rs
  • src/core/tds/validation.rs
  • src/core/validation.rs
  • src/delaunay/builder.rs
  • src/delaunay/construction.rs
  • src/delaunay/flips.rs
  • src/delaunay/pachner.rs
  • src/delaunay/query.rs
  • src/delaunay/spherical.rs
  • src/delaunay/validation.rs
  • src/geometry/algorithms/convex_hull.rs
  • src/geometry/realization.rs
  • src/geometry/util/measures.rs
  • src/geometry/util/point_generation.rs
  • src/lib.rs
  • src/topology/spaces/euclidean.rs
  • src/topology/spaces/spherical.rs
  • src/topology/traits/global_topology_model.rs
  • src/topology/traits/topological_space.rs
  • tests/benchmark_flip_fixtures.rs
  • tests/cli.rs
  • tests/delaunay_edge_cases.rs
  • tests/euler_characteristic.rs
  • tests/large_scale_debug.rs
  • tests/pachner_roundtrip.rs
  • tests/prelude_exports.rs
  • tests/proptest_delaunay_triangulation.rs
  • tests/proptest_flips.rs
  • tests/regressions.rs
  • tests/semgrep/src/project_rules/rust_style.rs
  • tests/spherical_delaunay.rs
  • tests/triangulation_builder.rs

Comment thread benches/README.md Outdated
Comment thread docs/invariants.md Outdated
Comment thread README.md
Comment thread scripts/postprocess_changelog.py
- Preserve nested changelog list structure when shallower parent items precede nested details.
- Protect relaxed explicit construction behavior across 2D-5D while retaining typed realization failures.
- Resolve Clippy tool pins through just and validate justfile formatting in check, fix, and CI workflows.
- Correct validation-level terminology and release and benchmark guidance.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
tests/triangulation_builder.rs (1)

811-874: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider documenting the geometric intent of the fixture generators.

shared_facet_vertices/shared_facet_simplices and crossing_cone_vertices/crossing_cone_simplices encode fairly intricate, dimension-generic coordinate/simplex constructions (shared-facet apex placement, cone-axis extension) with no comments explaining what scenario each is meant to exercise. A short doc comment per function (what geometric configuration it produces and why) would help future maintainers verify/extend these fixtures without reverse-engineering the arithmetic.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/triangulation_builder.rs` around lines 811 - 874, Add concise Rust doc
comments to shared_facet_vertices, shared_facet_simplices,
crossing_cone_vertices, and crossing_cone_simplices describing the geometric
configuration each fixture constructs and the triangulation scenario it
exercises, including the shared-facet apex placement and cone-axis extension.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@justfile`:
- Line 457: Document the existing cargo-lock-check integration without changing
justfile:457, which requires no direct change. In docs/dev/commands.md:226-243,
add the Cargo.toml/Cargo.lock synchronization bullet after release-version
reference synchronization; at docs/dev/commands.md:723-726, add the recommended
command matrix row for just cargo-lock-check; and around
docs/dev/commands.md:752, add the corresponding CI Expectations checklist item.

---

Nitpick comments:
In `@tests/triangulation_builder.rs`:
- Around line 811-874: Add concise Rust doc comments to shared_facet_vertices,
shared_facet_simplices, crossing_cone_vertices, and crossing_cone_simplices
describing the geometric configuration each fixture constructs and the
triangulation scenario it exercises, including the shared-facet apex placement
and cone-axis extension.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: b031e1eb-b897-4fcb-8529-d9f23aa248b9

📥 Commits

Reviewing files that changed from the base of the PR and between de09c0d and db1e6dd.

📒 Files selected for processing (11)
  • .github/workflows/rust-clippy.yml
  • README.md
  • benches/README.md
  • docs/RELEASING.md
  • docs/dev/commands.md
  • docs/dev/tooling-alignment.md
  • docs/invariants.md
  • justfile
  • scripts/postprocess_changelog.py
  • scripts/tests/test_postprocess_changelog.py
  • tests/triangulation_builder.rs
🚧 Files skipped from review as they are similar to previous changes (8)
  • .github/workflows/rust-clippy.yml
  • README.md
  • benches/README.md
  • scripts/postprocess_changelog.py
  • docs/invariants.md
  • docs/dev/tooling-alignment.md
  • scripts/tests/test_postprocess_changelog.py
  • docs/RELEASING.md

Comment thread justfile Outdated
@coderabbitai coderabbitai Bot removed the topology label Jul 13, 2026
- Move affine-chart orientation enforcement from intrinsic topology to Level 4 realization validation with typed negative-orientation diagnostics.
- Treat resolved simplex coordinate uniqueness as a cumulative Level 1 invariant while keeping Level 2 structure reports coordinate-independent.
- Synchronize validation documentation and figures, and harden supporting CI and changelog tooling.

BREAKING CHANGE: Level 3 topology APIs no longer reject negative geometric orientation, and Level 2 structure reports no longer include simplex coordinate-uniqueness failures. Use realization validation and cumulative TDS validation for those checks.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
docs/validation.md (1)

31-37: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Table column doesn't match its own header after the rename.

The "Depends on realization?" column expects Yes/No, but the Level 1 row now reads "Local coordinates only" (line 33) — inconsistent with rows 2–5. Additionally, the Level 4 row still says "Geometric realization" (line 36) while the rest of the doc renamed this concern to "Valid Realization" (line 28, line 529 heading). Worth reconciling both for consistency.

📝 Suggested fix
-| 1 | Local object correctness | Local coordinates only |
+| 1 | Local object correctness | No |
 | 2 | Combinatorial structure | No |
 | 3 | Intrinsic PL topology | No |
-| 4 | Geometric realization | Yes |
+| 4 | Valid realization | Yes |
 | 5 | Geometric predicates | Yes |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/validation.md` around lines 31 - 37, Update the validation table to keep
the “Depends on realization?” column values consistent with its Yes/No header,
changing the Level 1 entry to the appropriate value. Also rename the Level 4
concern from “Geometric realization” to “Valid Realization” to match the
terminology used elsewhere in the document.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@justfile`:
- Line 1713: Update the test-unit command around the cargo nextest invocation so
unit tests retain debug_assert! and default overflow-panic coverage. Add a
debug-profile pass or configure the ci release profile to re-enable these
checks, while preserving the existing release test coverage.

---

Nitpick comments:
In `@docs/validation.md`:
- Around line 31-37: Update the validation table to keep the “Depends on
realization?” column values consistent with its Yes/No header, changing the
Level 1 entry to the appropriate value. Also rename the Level 4 concern from
“Geometric realization” to “Valid Realization” to match the terminology used
elsewhere in the document.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: afae5ef5-5773-4434-a120-9f6148ce2b57

📥 Commits

Reviewing files that changed from the base of the PR and between db1e6dd and 221cd8d.

⛔ Files ignored due to path filters (2)
  • papers/generated/validation_hierarchy.png is excluded by !**/*.png, !**/generated/**
  • papers/validation.pdf is excluded by !**/*.pdf
📒 Files selected for processing (24)
  • .github/workflows/audit.yml
  • AGENTS.md
  • README.md
  • docs/ORIENTATION_SPEC.md
  • docs/dev/commands.md
  • docs/invariants.md
  • docs/numerical_robustness_guide.md
  • docs/validation.md
  • justfile
  • notebooks/01_validation.ipynb
  • scripts/postprocess_changelog.py
  • scripts/subprocess_utils.py
  • scripts/tests/test_postprocess_changelog.py
  • scripts/tests/test_subprocess_utils.py
  • src/core/orientation.rs
  • src/core/realization.rs
  • src/core/simplex.rs
  • src/core/tds/storage.rs
  • src/core/tds/validation.rs
  • src/core/validation.rs
  • src/delaunay/builder.rs
  • src/delaunay/validation.rs
  • src/lib.rs
  • tests/triangulation_builder.rs
🚧 Files skipped from review as they are similar to previous changes (14)
  • .github/workflows/audit.yml
  • src/core/tds/storage.rs
  • AGENTS.md
  • tests/triangulation_builder.rs
  • scripts/subprocess_utils.py
  • README.md
  • docs/dev/commands.md
  • scripts/postprocess_changelog.py
  • scripts/tests/test_postprocess_changelog.py
  • src/delaunay/validation.rs
  • notebooks/01_validation.ipynb
  • src/lib.rs
  • docs/invariants.md
  • src/core/realization.rs

Comment thread justfile
Run library unit tests under both debug and release profiles while retaining
the release timeout and bounding slower debug geometry tests.

Align the validation matrix and relaxed explicit-construction regression with
Level 4 realization semantics.
@coderabbitai coderabbitai Bot removed the topology label Jul 14, 2026
@acgetchell acgetchell merged commit e6e22f6 into main Jul 14, 2026
26 checks passed
@acgetchell acgetchell deleted the refactor/445-realization-validation branch July 14, 2026 02:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api breaking change documentation Improvements or additions to documentation geometry Geometry-related issues rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant